import Vue from 'vue';
/** 
 * 微信服务
 */
export default {
    /**
     * 第一步：用户同意授权，获取code
     * @param {*} params 
     */
    getAuthorizationCode(state) {
        let params = {
            appid: `wx08b3895f8a25ed9c`,
            redirect_uri: encodeURI(`http://wect.tianding8.com/`),
            response_type: `code`,
            scope: `snsapi_base`,
            state: state
        };

        let url = `https://open.weixin.qq.com/connect/oauth2/authorize?${Vue.utils.modelToGetRequestParameter(params)}#wechat_redirect`;

        location.href = url;
    },
    /**
     * 第二部：通过code，获取OpenID
     * @param {*} [params={}]
     * @param {*} [config={}]
     * @returns
     */
    async getOpenId(params = {}, config = {}) {
        config.params = params;
        let result = await Vue.http.get('/UserInfo/GetOpenid', config);
        return result;
    },
    /**
     * 微信支付SDK
     *
     * @param {*} params
     */
    JsSdk(params, router) {
        if (typeof WeixinJSBridge == "undefined") {
            if (document.addEventListener) {
                document.addEventListener('WeixinJSBridgeReady', () => {
                    this.onBridgeReady(params, router);
                }, false);
            } else if (document.attachEvent) {
                document.attachEvent('WeixinJSBridgeReady', () => {
                    this.onBridgeReady(params, router);
                });
                document.attachEvent('onWeixinJSBridgeReady', () => {
                    this.onBridgeReady(params, router);
                });
            }
        } else {
            this.onBridgeReady(params, router);
        }
    },
    /**
     * 调取微信支付
     * @param {*} params
     */
    onBridgeReady(params, router) {
        WeixinJSBridge.invoke(
            'getBrandWCPayRequest', {
                "appId": params.appId, //商户注册具有支付权限的公众号成功后即可获得
                "timeStamp": params.timeStamp, //当前的时间，其他详见时间戳规则  
                "nonceStr": params.nonceStr, //随机字符串，不长于32位。推荐随机数生成算法    
                "package": params.package, //订单详情扩展字符串，统一下单接口返回的prepay_id参数值，提交格式如：prepay_id=***
                "signType": params.signType, //签名类型，默认为MD5，支持HMAC-SHA256和MD5。注意此处需与统一下单的签名类型一致 
                "paySign": params.paySign //签名，详见签名生成算法
            },
            (res) => {
                console.log(params);

                let args = {
                    type: params.type,
                    total: params.total
                };
                // 使用以上方式判断前端返回,微信团队郑重提示：
                // res.err_msg将在用户支付成功后返回ok，但并不保证它绝对可靠。
                switch (res.err_msg) {
                    case "get_brand_wcpay_request:ok":
                        Vue.toast(`支付成功`);
                        router.push({ name: "tdPaySuccess", params: args });
                        //支付成功
                        break;
                    case "get_brand_wcpay_request:cancel":
                        Vue.toast(`您已取消支付`);
                        router.push({ name: "tdPayFailed", params: args });
                        //支付过程中用户取消
                        break;
                    case "get_brand_wcpay_request:fail":
                        Vue.toast(`支付失败`);
                        router.push({ name: "tdPayFailed", params: args });
                        //支付失败
                        break;
                    default:
                        Vue.toast(`支付异常`);
                        router.push({ name: "tdPayFailed", params: args });
                        //调用支付JSAPI缺少参数：total_fee
                        //1、请检查预支付会话标识prepay_id是否已失效
                        //2、请求的appid与下单接口的appid是否一致
                        break;
                }
            });
    }

}